#include <bits/stdc++.h>
void solve(std::string s, int n){
int CP = 0;
int DP = 1;
std::vector <int> ans(10, 0);
std::vector <bool> met(n, false);
while (1) {
if (s[CP] != '<' && s[CP]!='>') {
ans[s[CP]-'0']++;
if (s[CP] != '0') s[CP]--;
else met[CP] = true;
CP += DP;
while (CP>=0 && CP<n && met[CP]) CP += DP;
if (CP<0 || CP>=n) break;
}
else {
if (s[CP]=='>') DP = 1;
else DP = -1;
int pos = CP;
CP += DP;
while (CP>=0 && CP<n && met[CP]) CP += DP;
if (CP<0 || CP>=n) break;
if (s[CP]=='>' || s[CP]=='<') met[pos] = true;
}
}
for (int i = 0;i<10;i++)
std::cout << ans[i] << " ";
std::cout << "\n";
}
int main() {
int n, q;
std::cin >> n >> q;
std::string s;
std::cin >> s;
while (q--) {
int l, r;
std::cin >> l >> r;
solve(s.substr(l-1, r-l+1), r-l+1);
}
return 0;
}/*1690616271.7140307*/
112. Path Sum | 1556A - A Variety of Operations |
136. Single Number | 169. Majority Element |
119. Pascal's Triangle II | 409. Longest Palindrome |
1574A - Regular Bracket Sequences | 1574B - Combinatorics Homework |
1567A - Domino Disaster | 1593A - Elections |
1607A - Linear Keyboard | EQUALCOIN Equal Coins |
XOREQN Xor Equation | MAKEPAL Weird Palindrome Making |
HILLSEQ Hill Sequence | MAXBRIDGE Maximise the bridges |
WLDRPL Wildcard Replacement | 1221. Split a String in Balanced Strings |
1002. Find Common Characters | 1602A - Two Subsequences |
1555A - PizzaForces | 1607B - Odd Grasshopper |
1084A - The Fair Nut and Elevator | 1440B - Sum of Medians |
1032A - Kitchen Utensils | 1501B - Napoleon Cake |
1584B - Coloring Rectangles | 1562B - Scenes From a Memory |
1521A - Nastia and Nearly Good Numbers | 208. Implement Trie |